cat file.txt | gawk '{print $2}' > test
我有显示命令:
1
1
0
0
1
1
然后:
vi test
:%s/\n//
输出:110011
我的问题是我不知道如何将这最后一步与管道结合起来。
更新:可能与有关sed
。我尝试使用sed 's/\n//'
但仍然不起作用(它没有任何变化)。
答案1
要删除文件中的字节,test
只需使用tr
.这将保存输出到test2
<test tr -d '\n' >test2
你应该直接重定向,而不是cat
像这样使用管道
您可以使用awk
但它也会接收一个文件名,因此不需要像您的答案中那样将输出传递给它,而且您实际上也不需要这样的 2 个步骤。只需设置输出记录分隔符默认情况下,新行将变为空字符串。这将把原始文件中的第二个字段直接打印到输出文件中
awk -v ORS='' '{ print $2 }' file.txt >test
# or
awk -v ORS='' '{ print $2 }' <file.txt >test
或者可以像这样设置变量
awk 'BEGIN { ORS="" } { print $2 }' file.txt >test
您可能需要END { print "\n" }
在末尾添加打印换行符
答案2
另一种方法是:
gawk '{print $2}' file.txt | paste -d'\0' -s
-s
连续paste
-d '\0'
粘贴时没有分隔符。
答案3
您将需要另一个将换行符替换为“”的 gawk:
cat file.txt | gawk '{print $2}' | gawk '{printf "%s",$0} END {print ""}'
来源:1(serverfault.com)
更简单:
cat test | awk '{printf $2} END {print ""}'
最后:
cat test | gawk '{printf $2}'
(使用 cygwin64 终端)
答案4
使用拉库(以前称为 Perl_6)
Raku 是 Perl 家族编程语言中的一种。具体来说,Raku 内置了高级 Unicode 支持,无需任何外部库:
~$ cat test | raku -e 'lines.join.put;'
#OR
~$ cat test | raku -ne '.print;'
示例输入:
1
1
0
0
1
1
示例输出:
110011