sed:批处理-将x、y、z值的3列按x、y和z的顺序合并为1列

sed:批处理-将x、y、z值的3列按x、y和z的顺序合并为1列,sed,Sed,同样,我有大约150个文件,其中包含以下没有标题的数据 x1 y1 z1 x2 y2 z2 锌 分隔符恰好是tab键。如何对这150个文件使用sed和批处理来实现以下输出: x1 x2 x3 xn y1 y2 y3 伊恩 z1 z2 z3 锌 任何想法都将不胜感激 注意:我以前也发过类似的问题,不是重复的。请看这个 问候, 我希望你对perl不过敏 此解决方案适用于具有任意列数的文件: $ perl -ne 'BEGIN { @a = (); } $i = 0; foreach (spl

同样,我有大约150个文件,其中包含以下没有标题的数据

x1 y1 z1

x2 y2 z2

分隔符恰好是tab键。如何对这150个文件使用sed和批处理来实现以下输出:

x1

x2

x3

xn

y1

y2

y3

伊恩

z1

z2

z3

任何想法都将不胜感激

注意:我以前也发过类似的问题,不是重复的。请看这个

问候,


我希望你对perl不过敏

此解决方案适用于具有任意列数的文件:

$ perl -ne 'BEGIN { @a = (); } $i = 0; foreach (split(/\s+/)) { $l = ($a[$i++] ||= []); push @$l, $_; }; END { print join("\n", @$_) . "\n" foreach (@a); }' << EOF
> x1 y1 z1
> x2 y2 z2
> x3 y3 z3
> x4 y4 z4
> EOF
x1
x2
x3
x4
y1
y2
y3
y4
z1
z2
z3
z4

我不认为sed是这份工作的最佳工具。想到的最简单的解决方案就是使用
cut
三次:

cut -f1 file && cut -f2 file && cut -f3 file
文件的内容

x1  y1  z1
x2  y2  z2
x3  y3  z3
xn  yn  zn
结果:

x1
x2
x3
xn
y1
y2
y3
yn
z1
z2
z3
zn
对于批量处理文件,假设您当前工作目录中只有感兴趣的文件:

for i in *; do 
    cut -f1 "$i" >> "$i.bak"
    cut -f2 "$i" >> "$i.bak"
    cut -f3 "$i" >> "$i.bak"

    mv "$i.bak" "$i"
done

我从来没有想到有人会给我一个很好的建议不,我对perl不过敏。老实说,当我看到“cut”时,我对自己说:“什么是‘cut’?”啊!如果我知道如何正确使用这些工具,我会节省很多时间。再次感谢您分享您的简单化和极简化方法。
for i in *; do 
    cut -f1 "$i" >> "$i.bak"
    cut -f2 "$i" >> "$i.bak"
    cut -f3 "$i" >> "$i.bak"

    mv "$i.bak" "$i"
done