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块将不会为它执行。