根据模式加入行

时间:2011-11-16 17:41:15

标签: bash shell scripting solaris

我有以下文件:

test
1
My
2
Hi
3

我需要一种方法来使用cat,grep或awk来提供以下输出:

test1
My2
Hi3

如何在单个命令中实现此目的?

之类的东西
cat file.txt | grep ... | awk ...

请注意,它始终是一个字符串,后跟原始文本文件中的数字。

5 个答案:

答案 0 :(得分:7)

sed 'N;s/\n//' file.txt

当内容在file.txt

中时,这应该提供所需的输出

答案 1 :(得分:3)

paste -d "" - - < filename

这需要连续的行并将它们粘贴在一起,用空字符串分隔。

答案 2 :(得分:2)

awk '{printf("%s", $0);} !(NR%2){printf("\n");}' file.txt

<小时/> 编辑:我刚刚注意到您的问题需要使用catgrep。这些计划都不是实现既定目标所必需的。如果你有一些理由将它们包括在你没有提到过的内容中,试试我上面写的这行(无用的低效)版本:

cat file.txt | grep '^' | awk '{printf("%s", $0);} !(NR%2){printf("\n");}'

此命令可能使用原始awk程序中不存在的功能。您可能需要调用新的awk程序nawk

答案 3 :(得分:0)

如果你的输入文件总是1个数字,那么1个字符串,你只需要字符串,你所要做的就是每隔一行。

如果你只想要奇数行,你可以awk 'NR % 2' file.txt

如果你想要平均,那就变成了awk 'NR % 2==0' data

答案 4 :(得分:0)

以下是答案: cat file.txt | awk 'BEGIN { lno = 0 } { val=$0; if (lno % 2 == 1) {printf "%s\n", $0} else {printf "%s", $0}; ++lno}'