我想使用外部bash环境(例如Cygwin或MobaXTerm提供的环境)将Windows文本文件中的两行连续合并。
我知道有人问过类似的问题,并且已经准备好解决,但是由于某些原因,它们不适用于我的环境。也许是因为Windows在Windows中添加了bash工具无法识别的一些不可见字符?
以下是我已经尝试过的其他类似问题的解决方案:
awk 'NR%2{a=$0;next}{print a","$0}' test.txt
grep "line" test.txt |awk 'NR==0{prefix=$0;next} {print prefix, $0}'
sed '$!N;s/\n/,/' test.txt
我正在使用的输入:
first line
second line
third line
fourth line
fifth line
sixth line
预期结果:
first line,second line
third line,fourth line
fifth line,sixth line
到目前为止我尝试过的任何代码的实际结果:
1)
➤ sed '$!N;s/\n/,/' test.txt
,second line
,fourth line
,sixth line
2)
➤ grep "line" test.txt |awk 'NR==0{prefix=$0;next} {print prefix, $0}'
first line
second line
third line
fourth line
fifth line
sixth line
这里的任何帮助将不胜感激。
答案 0 :(得分:1)
$ cat -v file
first line^M
second line^M
third line^M
fourth line^M
fifth line^M
sixth line^M
使用GNU awk进行多字符RS:
$ awk -v RS='\r?\n' -v OFS=',' 'NR%2{p=$0; next} {print p, $0}' file
first line,second line
third line,fourth line
fifth line,sixth line
任何awk:
$ awk -v OFS=',' '{sub(/\r$/,"")} NR%2{p=$0; next} {print p, $0}' file
first line,second line
third line,fourth line
fifth line,sixth line
答案 1 :(得分:1)
使用GNU SELECT pg_catalog.set_config('search_path', '', false);
-
sed
$: cat in
0
1
2
3
4
5
6
7
8
9
$: sed 'N; s/\r*\n/,/; p; d;' in # no dash-options needed
0,1
2,3
4,5
6,7
8,9
-将下一行添加到当前行
N;
-用逗号替换所有CR和换行符
s/\r*\n/,/;
-打印结果
p;
-删除它,使d;
不会自动打印。
与
相同的输出sed
这是$: sed -En 'N; s/\r?\n/,/; p;' in
扩展的模式匹配,-E
是自动打印。
答案 2 :(得分:0)
一个非常简单的解决方案是使用粘贴:
cat > FILE <<EOF
first line
second line
third line
fourth line
fifth line
sixth line
然后:
▶ paste -d, - - < FILE
first line,second line
third line,fourth line
fifth line,sixth line
进一步的解释:
paste
实用程序将给定输入文件的相应行串联在一起。如果为任何文件指定了-
,则使用STDIN,并且对于-
的每个实例,以循环方式一次读取一行。
-d,
告诉粘贴使用,
作为字段分隔符,而不是默认的制表符。
答案 3 :(得分:0)
这是一个awk
解决方案
awk 'NR%2==1{x=$0;next}{print x "," $0}' file
输出
first line,second line
third line,fourth line
fifth line,sixth line