awk将文件和文件的行连接成单个文件

时间:2015-10-06 14:20:01

标签: awk concatenation

我想将文件的几行连接到一行,然后再将每个文件分隔为文件中的新记录。

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

3 个答案:

答案 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