我有一个用于合并2个文件的awk代码,并使用“>>”将结果添加到file.txt的末尾
我的代码
NR==FNR && $2!=0 {two[$0]++;j=1; next }{for(i in two) {split(i,one,FS); if(one[3] == $NF){x=$4;sub( /[[:digit:]]/, "A", $4); print j++,$1,$2,$3,x,$4 | "column -t" ">>" "./Desktop/file.txt"}}}
我想把我的awk放到bash脚本中并最终排序我的file.txt并使用>
再次将排序后的结果保存到file.txt
我试过这个
#!/bin/bash
command=$(awk '{NR==FNR && $2!=0 {two[$0]++;j=1; next }{for(i in two) {split(i,one,FS); if(one[3] == $NF){x=$4;sub( /[[:digit:]]/, "A", $4); print $1,$2,$3,$4 | "column -t" ">>" "./Desktop/file.txt"}}}}')
echo -e "$command" | column -t | sort -s -n -k4 > ./Desktop/file.txt
但它给了我错误"for reading (no such a file or directory)"
我的错误在哪里?
提前致谢
答案 0 :(得分:1)
1)您没有为awk脚本指定输入文件。这样:
command=$(awk '{...stuff...}')
需要:
command=$(awk '{...stuff...}' file1 file2)
2)你在行动部分内移动你的awk条件“NR == ...”,这样它就不再是一个条件了。
3)你的awk脚本输出进入“file.txt”,所以当你在后续行回显它时,“command”为空。
4)你有未使用的变量x和j
5)你不必要地将arg FS传递给split()。
等...
我认为你想要的是:
command=$( awk '
NR==FNR && $2!=0 { two[$0]++; next }
{
for(i in two) {
split(i,one)
if(one[3] == $NF) {
sub(/[[:digit:]]/, "A", $4)
print $1,$2,$3,$4
}
}
}
' file1 file2 )
echo -e "$command" | column -t >> "./Desktop/file.txt"
echo -e "$command" | column -t | sort -s -n -k4 >> ./Desktop/file.txt
但很难说。