Shell 如何在awk中写入文件的第n列?

Shell 如何在awk中写入文件的第n列?,shell,awk,Shell,Awk,例如: abc xyz 123 546 input.txt: asdad asdad adghf dfytr 我想在第2列中添加上述列。预期输出如下所示 output.txt: asdad abc asdad xyz adghf 123 dfytr 567 您要查找的命令是paste,而不是awk。您可以在awk中执行此操作,但您可能会发现paste更容易: pax> cat qq1 asdad asdad adghf dfytr pax> cat qq2 abc x

例如:

abc
xyz
123
546
input.txt:

asdad
asdad
adghf
dfytr
我想在第2列中添加上述列。预期输出如下所示

output.txt:

asdad  abc
asdad  xyz
adghf  123
dfytr  567

您要查找的命令是
paste
,而不是
awk
。您可以在
awk
中执行此操作,但您可能会发现
paste
更容易:

pax> cat qq1
asdad
asdad
adghf
dfytr

pax> cat qq2
abc
xyz
123
546

pax> paste qq1 qq2
asdad   abc
asdad   xyz
adghf   123
dfytr   546

如果需要分隔符的空格而不是制表符,请使用
paste-d''qq1 qq2

要查找的命令是
paste
而不是
awk
。您可以在
awk
中执行此操作,但您可能会发现
paste
更容易:

pax> cat qq1
asdad
asdad
adghf
dfytr

pax> cat qq2
abc
xyz
123
546

pax> paste qq1 qq2
asdad   abc
asdad   xyz
adghf   123
dfytr   546

如果需要分隔符的空格而不是制表符,请使用
paste-d''qq1 qq2

paste
是最简单的解决方案。下面是一个不必将整个第一个文件存储在内存中的awk示例:

awk '{getline second < "example"; printf("%s\t%s\n",$0,second)}' input.txt
awk'{getline second<“示例”;printf(“%s\t%s\n”,$0,second)}input.txt

粘贴
是最简单的解决方案。下面是一个不必将整个第一个文件存储在内存中的awk示例:

awk '{getline second < "example"; printf("%s\t%s\n",$0,second)}' input.txt
awk'{getline second<“示例”;printf(“%s\t%s\n”,$0,second)}input.txt

您可以只使用
bash

exec 4<file2
while read -r line1
do
 read -r line2 <&4
 echo $line $line2
 done < file1
exec 4>&-

exec 4您可以只使用
bash

exec 4<file2
while read -r line1
do
 read -r line2 <&4
 echo $line $line2
 done < file1
exec 4>&-
awk中的执行4:

awk 'NR==FNR {x[NR] = $0} NR != FNR {print x[FNR], $0}' col1_file col2_file
虽然在awk中使用粘贴可能更好:

awk 'NR==FNR {x[NR] = $0} NR != FNR {print x[FNR], $0}' col1_file col2_file

虽然使用“粘贴”可能更好,但这也适用于其他类似sh的shell,而不仅仅是bash。不过,您应该在读取之前使用
IFS=
。另外,您应该检查您的边缘情况:如果file1的最后一行不是以
\n
结尾,我认为这里的while块不会对它执行。这也应该适用于其他类似sh的shell,而不仅仅是bash。不过,您应该在读取之前使用
IFS=
。另外,您应该检查您的边缘情况:如果file1的最后一行没有以
\n
结尾,我认为这里的while块将不会为它执行。