我想将文件的几行连接到一行,然后再将每个文件分隔为文件中的新记录。
FILE1.TXT
aaa bbb ccc
ddd eee fff
FILE2.TXT
hhh iii jjj
kkk lll mmm
newfile.txt
file1.txt aaa bbb ccc ddd eee fff
file2.txt hhh iii jjj kkk lll mmm
这是我提出的,但无法将文件作为记录分开。
gawk -v ORS=" " "LF != FILENAME { print FILENAME; LF=FILENAME }; {$1=$1} 1; END { printf("\n");}" *.txt >newfile.txt
答案 0 :(得分:3)
您可以将@Jose Ricardo Bustos M.解决方案重写为
for f in file{1,2}.txt; do printf "%s %s\n" $f "$(tr '\n' ' ' <$f)"; done
或awk解决方案
$ awk 'FNR==1{f=FILENAME;a[f]=f}
{a[f]=a[f] FS $0}
END{for(i in a) print a[i]}' file{1,2}.txt
如果您的awk支持ENDFILE,则可以简化。
答案 1 :(得分:2)
您可以尝试使用tr
,
for f in `ls file*.txt | sort`; do
printf "%s %s\n" "$f" "$(cat $f | tr '\n' ' ')";
done
你得到了
file1.txt aaa bbb ccc ddd eee fff file2.txt hhh iii jjj kkk lll mmm
Awk解决方案
awk '
LF != FILENAME{
LF=FILENAME;
if(NR>1) printf "%s\n", s
printf "%s ", LF;
s="";
}
{s=s $0}
END{printf "%s\n", s}' file*.txt
答案 2 :(得分:0)
你可以试试这个单行,
for f in *.txt; do printf "%s " $f; sed 'N; s/\n/ /g' $f; done > newfile