Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 从文件中的特定行生成新列?_Unix_Awk_Sed - Fatal编程技术网

Unix 从文件中的特定行生成新列?

Unix 从文件中的特定行生成新列?,unix,awk,sed,Unix,Awk,Sed,我正试图解决以下问题,但几次尝试都没有成功 假设我的文件中包含以下内容: a,b,c d,e,f g h 我需要某种方法将g和h添加为第三列,以便文件如下所示: a, b, c, g d, e, f, h 谢谢你的帮助。我一点也不清楚如何概括你的问题。(即,您希望如何处理8行文件?),但对于您似乎希望交换第2行和第3行并粘贴的特定情况,您可以使用: perl -e 'chomp (my @ar =<>); @ar[1,2] = @ar[2, 1]; map { $_ .=

我正试图解决以下问题,但几次尝试都没有成功

假设我的文件中包含以下内容:

a,b,c

d,e,f

g

h
我需要某种方法将g和h添加为第三列,以便文件如下所示:

a, b, c, g

d, e, f, h

谢谢你的帮助。

我一点也不清楚如何概括你的问题。(即,您希望如何处理8行文件?),但对于您似乎希望交换第2行和第3行并粘贴的特定情况,您可以使用:

perl -e 'chomp (my @ar =<>); @ar[1,2] = @ar[2, 1]; map { $_ .= ($i++%2 ? "\n" : ",")} @ar; print @ar' input
perl-e'chomp(my@ar=)@ar[1,2]=@ar[2,1];映射{$\.=($i++%2?\n):“,”}@ar;打印@ar'输入

也许您可以修改它以满足您的需要。

如果“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

awk-F,'$0~/\S/{if(NF>1){m[++i]=$0}else{n[++j]=$0}}}END{for(;c++注意,我理解你的问题是关于如何将第3行连接到第1行的末尾,第4行连接到第2行的末尾,然后将第7行连接到第5行的末尾,将第8行连接到第6行的末尾,依此类推

我假设您确实有一个输入文件,如:

a、b、c
d、 e,f
G
H
如果您的文件确实是双倍行距的,您可以使用以下方法进行修复:

sed'/./!d'文件
然后,将第二行连接到它前面的第2行:

cat文件| sed'/./!d'| awk'
开始{
d[0]=”;d[1]=“”
}
{
n=NR%2
如果(d[n]==“”)
d[n]=0美元
否则{
打印d[n],“$0
d[n]=“”
}
}
'
如果你要求的话,我很乐意进一步解释这个代码

另外,如果您需要处理文件包含奇数行的可能性,如

a、b、c
d、 e,f
G
H
x、 y,z
将端块添加到AWK:

结束{
如果(d[1]!=“”)打印d[1]
如果(d[0]!=“”)打印d[0]
}

您是否从零开始编制索引?您的输出将g和h放在通常称为第4列的位置。您尝试过什么代码?您的问题描述需要更多详细信息。文件是否总是有四行,两行有3列,两行有1列?