如何在unix中以所需格式转换以下文本?

时间:2015-06-09 19:45:40

标签: unix awk

我有一个文件格式如下:

1
2
3
4
5
6

我试图让它像:

1 2
3 4
5 6

我试过了

awk 'BEGIN { ORS= " "} {print}' test.txt

它使1 2 3 4 5 6.但我需要以上述格式制作它。 我也试过

awk 'BEGIN { ORS= " "} {print}' test.txt | tr '  ' '\n'

但似乎tr不考虑双空格,结果是:

1
2
3
4
5
6

我该怎么办?

PS 在文件中有一个换行符介于1和2以及4和5之间,依此类推,两个换行符介于2和3以及4和5之间,依此类推。由于这个编辑器的知识有限,我无法以这种方式打印。

6 个答案:

答案 0 :(得分:3)

如果您的文件名为xargs -L 2 < test.txt ,则可以执行

- (void)viewWillAppear:(BOOL)animated{
    [_firstSlider setValue:[[NSUserDefaults standardUserDefaults] floatForKey:@"firstSliderValue"]];
}

- (IBAction)firstSliderValueChange:(id)sender {
    [[NSUserDefaults standardUserDefaults] setFloat:[_firstSlider value] forKey:@"firstSliderValue"];
}

答案 1 :(得分:0)

首先删除所有空行,然后在GNU sed中使用N选项

sed '/^\s*$/d' file | sed 'N; s/\n/ /'

答案 2 :(得分:0)

如果你不介意使用bash,我有一个想法:

content=`cat your_file`

while [ -n "$content" ]; do
    read a b content <<< $content
    echo $a $b >> target_file
done

此代码可以将字符串折叠两次。注意引用在这个片段中很重要。

答案 3 :(得分:0)

或者当您发布awk个问题时,这里是awk

 awk '{printf("%s %s", $0, (NR%2) ? "": "\n") }' file

<强>输出

1 2
3 4
5 6

IHTH

答案 4 :(得分:0)

您也可以使用$ seq 10 | pr -t -T -a -s" " -2 1 2 3 4 5 6 7 8 9 10

userAgent

答案 5 :(得分:0)

在unix中有很多方法可以完成这项任务。除了已经提供的答案之外,还有以下几种方法:

使用sed:

#   label1
#variable=foobar1

#   label2
#variable=foobar2

使用awk:

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

使用粘贴:

awk 'ORS=NR%2?FS:RS' test.txt

编辑 - 我刚刚看到你关于新线路的说明。如果文件中有多个空白的新行,我的答案中的上述解决方案都无法正常工作。您首先必须使用以下内容删除它们:

paste -s -d" \n" test.txt
相关问题