文件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个索引附加到文件1。
awk '$0=substr($0,1,10)"X"substr($0,12,length($0))' input.txt > output.txt
上面的awk命令对于文件作为输入来说效果很好。但是我需要一个变量作为输入,其值会随着每一行的变化而变化。
从文件2读取值并追加到文件1。从第n个索引到第n个索引。
答案 0 :(得分:2)
您快到了。请尝试以下操作:
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
[说明]
line
索引的数组FNR
中。FNR
关联的数组中。[编辑]
这里是bash的替代品,以防万一:
paste -d "" <(cut -b 1-23 file1) file2 <(cut -b 24- file1)
希望这会有所帮助。
答案 1 :(得分:1)
另一个:
$ 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的测试。
答案 2 :(得分:0)
就像@tshiono的评论一样,粘贴是处理此类情况的正确工具。如果您想尝试Perl,可以在下面进行操作
$ cat manoj1.txt
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131
1000000010019000000000012001011234567001011234567 2019013120190131
$ cat manoj2.txt
ABCDEFGHIJKLMNO
ZAEDWQOIRPFJVND
SDEOIMFUJRKDMEU
WOQOEMFJCMSKSLD
XNCJFURYYEJWODK
EIWKEMDLDDLFMVM
$
输入:
{{1}}