Добавить из n-го в n-й индекс файла с другим файлом - PullRequest
0 голосов
/ 04 февраля 2019

Файл 1:

1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131

Файл 2:

ABCDEFGHIJKLMNO
ZAEDWQOIRPFJVND
SDEOIMFUJRKDMEU
WOQOEMFJCMSKSLD
XNCJFURYYEJWODK
EIWKEMDLDDLFMVM

Выходной файл:

10000000100190000000000ABCDEFGHIJKLMNO12001011234567001011234567 2019013120190131
10000000100190000000000ZAEDWQOIRPFJVND12001011234567001011234567 2019013120190131
10000000100190000000000SDEOIMFUJRKDMEU12001011234567001011234567 2019013120190131
10000000100190000000000WOQOEMFJCMSKSLD12001011234567001011234567 2019013120190131
10000000100190000000000XNCJFURYYEJWODK12001011234567001011234567 2019013120190131
10000000100190000000000EIWKEMDLDDLFMVM12001011234567001011234567 2019013120190131

Здесь мне нужно добавить содержимое файла 2 вФайл 1 с n-го по n-й индекс файла 1.

awk '$0=substr($0,1,10)"X"substr($0,12,length($0))' input.txt > output.txt

Приведенная выше команда awk хорошо работает для файла в качестве ввода. Но мне нужна переменная в качестве ввода, значение которой будет изменяться для каждой строки.

Считать значение из файла 2 и добавить в файл 1. С n-го по n-й индекс.

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Как и в комментариях @ tshiono, вставка является подходящим инструментом для таких случаев. Если вы хотите попробовать Perl, ниже подойдет

$ perl -e ' BEGIN { @f1=qx(cat manoj1.txt);@f2=qx(cat manoj2.txt); for(0..$#f1) { chomp($f2[$i]); printf("%s%s%s",substr($f1[$i],0,23),$f2[$i],substr($f1[$i],23)) }} '
10000000100190000000000ABCDEFGHIJKLMNO12001011234567001011234567 2019013120190131
10000000100190000000000ABCDEFGHIJKLMNO12001011234567001011234567 2019013120190131
10000000100190000000000ABCDEFGHIJKLMNO12001011234567001011234567 2019013120190131
10000000100190000000000ABCDEFGHIJKLMNO12001011234567001011234567 2019013120190131
10000000100190000000000ABCDEFGHIJKLMNO12001011234567001011234567 2019013120190131
10000000100190000000000ABCDEFGHIJKLMNO12001011234567001011234567 2019013120190131

$

Входные данные:

$ cat manoj1.txt
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131

$ cat manoj2.txt
ABCDEFGHIJKLMNO
ZAEDWQOIRPFJVND
SDEOIMFUJRKDMEU
WOQOEMFJCMSKSLD
XNCJFURYYEJWODK
EIWKEMDLDDLFMVM

$
0 голосов
/ 04 февраля 2019

Другое:

$ awk 'BEGIN{FS=OFS=""}NR==FNR{a[FNR]=$0;next}{$23=$23 a[FNR]}1' file2 file1

Вывод:

10000000100190000000000ABCDEFGHIJKLMNO12001011234567001011234567 2019013120190131
10000000100190000000000ZAEDWQOIRPFJVND12001011234567001011234567 2019013120190131
10000000100190000000000SDEOIMFUJRKDMEU12001011234567001011234567 2019013120190131
10000000100190000000000WOQOEMFJCMSKSLD12001011234567001011234567 2019013120190131
10000000100190000000000XNCJFURYYEJWODK12001011234567001011234567 2019013120190131
10000000100190000000000EIWKEMDLDDLFMVM12001011234567001011234567 2019013120190131

Объяснено:

$ awk '
BEGIN {
    FS=OFS=""        # set delimiters to null, each char is a field
}
NR==FNR {     
    a[FNR]=$0        # hash
    next
}
{
    $23=$23 a[FNR]   # append to right field
}1' file2 file1      # output

Протестировано с gawk, mawk, busybox awk и original-awk.

0 голосов
/ 04 февраля 2019

Вы почти у цели.Пожалуйста, попробуйте следующее:

awk 'NR==FNR {line[FNR]=$0; next} {print substr($0,1,23) line[FNR] substr($0,24,length($0))}' file2 file1

выход:

10000000100190000000000ABCDEFGHIJKLMNO12001011234567001011234567 2019013120190131
10000000100190000000000ZAEDWQOIRPFJVND12001011234567001011234567 2019013120190131
10000000100190000000000SDEOIMFUJRKDMEU12001011234567001011234567 2019013120190131
10000000100190000000000WOQOEMFJCMSKSLD12001011234567001011234567 2019013120190131
10000000100190000000000XNCJFURYYEJWODK12001011234567001011234567 2019013120190131
10000000100190000000000EIWKEMDLDDLFMVM12001011234567001011234567 2019013120190131

[Объяснение]

  • Сценарий сначала читает «file2» и сохраняет строки вмассив line, проиндексированный по номеру строки FNR.
  • Далее скрипт читает «file1» и вставляет строку в массив, связанный с FNR.

[Редактировать]

Вот альтернатива bash на всякий случай:

paste -d "" <(cut -b 1-23 file1) file2 <(cut -b 24- file1)

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...