我有以下包含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
答案 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
的事实,即文件描述符warn
,STDERR
转到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数组从零开始)。