我正在尝试解决以下问题,但是几次尝试都未能解决问题。
假设我的文件中包含以下内容:
a,b,c
d,e,f
g
h
我需要某种方式将g和h添加为第三列,以便文件看起来像这样:
a, b, c, g
d, e, f, h
感谢您的帮助。
答案 0 :(得分:1)
如果“ d”文件中的数据,请在gnu awk上尝试:
awk -F, '$0~/\S/ {if(NF>1) {m[++i]=$0} else {n[++j]=$0}} END{for(;c++<i;){print m[c]","n[c]}}' d
答案 1 :(得分:1)
请注意,我理解您的问题是关于如何将第3行连接到第1行的末尾,如何将第4行连接到2的末尾,然后将第7行连接到5的末尾,以及如何将8连接到6的末尾,依此类推。
我假设您确实有一个输入文件,例如:
schema_version
如果文件确实是双倍间距的,则可以使用以下命令对其进行修复:
a,b,c
d,e,f
g
h
然后将第二行连接到前面的第二行:
sed '/./!d' FILE
如果您愿意,我很高兴进一步解释此代码。
此外,如果您需要处理文件包含奇数行的可能性,例如
cat FILE | sed '/./!d' | awk '
BEGIN {
d[0] = ""; d[1] = ""
}
{
n = NR % 2
if (d[n] == "")
d[n] = $0
else {
print d[n] "," $0
d[n] = ""
}
}
'
在您的AWK中添加一个END块:
a,b,c
d,e,f
g
h
x,y,z
答案 2 :(得分:0)
我还不清楚如何概括您的问题。 (即,您想对8行文件做什么?),但是对于您似乎想交换第二行和第三行并粘贴的特殊情况,可以使用:
perl -e 'chomp (my @ar =<>); @ar[1,2] = @ar[2, 1]; map { $_ .= ($i++%2 ? "\n" : ",")} @ar; print @ar' input
也许您可以对其进行修改以适合您的需求。