sed:批处理-将x、y、z值的3列按x、y和z的顺序合并为1列
同样,我有大约150个文件,其中包含以下没有标题的数据 x1 y1 z1 x2 y2 z2 锌 分隔符恰好是tab键。如何对这150个文件使用sed和批处理来实现以下输出: x1 x2 x3 xn y1 y2 y3 伊恩 z1 z2 z3 锌 任何想法都将不胜感激 注意:我以前也发过类似的问题,不是重复的。请看这个 问候,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
我希望你对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