Linux将文件分成两列

时间:2018-03-17 03:59:38

标签: linux cut

我有以下包含2列的文件:

A:B:IP:80                  apples    
C:D:IP2:82                 oranges    
E:F:IP3:84                 grapes

如何将文件拆分为2个其他文件,每个文件中的每列如下:

File1中

A:B:IP:80    
C:D:IP2:82    
E:F:IP3:84

文件2

apples
oranges
grapes

3 个答案:

答案 0 :(得分:3)

尝试:

awk '{print $1>"file1"; print $2>"file2"}' file

运行该命令后,我们可以验证是否已创建所需的文件:

$ cat file1
A:B:IP:80
C:D:IP2:82
E:F:IP3:84

$ cat file2
apples
oranges
grapes

如何运作

  • print $1>"file1"

    这告诉awk将第一列写入file1

  • print $2>"file2"

    这告诉awk将第二列写入file2

答案 1 :(得分:1)

Perl 1-liner使用(滥用)STDOUT转到1的事实,即文件描述符warnSTDERR转到2,即文件描述符 # perl -n means loop over the lines of input automatically # perl -e means execute the following code # chomp means remove the trailing newline from the expression perl -ne 'chomp(my @cols = split /\s+/); # Split each line on whitespace print $cols[0] . "\n"; warn $cols[1] . "\n"' <input 1>col1 2>col2

cut -b

当然,您可以将{{1}}与相应的列一起使用,但之后您需要两次读取该文件。

答案 2 :(得分:1)

这是一个可以与任意数量的列一起使用的awk解决方案:

A 1
B
C 3

此步骤遍历该行的每个字段,并根据列号将字段打印到不同的输出文件。

请注意,空白字段 - 或者更确切地说,字段数少于其他行的行将导致行号不匹配。也就是说,如果您的输入是:

File2

然后1 3 将包含:

while read -r line; do
  a=($line)
  for m in "${!a[@]}"; do
    printf '%s\n' "${a[$m]}" >> File$((m+1))
  done
done < input.txt

如果这是一个问题,请在更新问题时提及。

当然,您可以通过多种方式单独使用bash执行此操作。这是一个:

$line

这会将每行输入读取到$line,然后将$a[]字词拆分为#include<QCoreApplication> initialUrl="file:/" + QCoreApplication::applicationDirPath() + "/html/view.html" context->setContextProperty(QStringLiteral("initialUrl"), Utils::fromUserInput(initialUrl)); 数组中的值。然后逐步遍历该数组,将每个项目打印到相应的文件,以数组的索引命名(加一,因为bash数组从零开始)。