我想从ifile.txt打印1到10列,23列和27列。我可以使用以下命令打印第一到第十列
awk '{n=10; for (i=1;i<=n;i++) printf "%f ", $i; print "";}' ifile.txt但是我不能把23和27列加进去。
我已经尝试了以下建议,但仍然存在一些问题。例如,我的ifile.txt是:
ifile.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30当我使用下面的代码时
#!/bin/bash
awk '{
n=10
for (i=1; i<=n; i++)
a[$i]
a[$23]
a[$27]
for (k in a)
printf "%5.1f", k, FS
print ""
}' ifile.txt它给了我们
4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0
4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0
4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0
4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0
4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0
4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0
4.0 27.0 5.0 6.0 7.0 8.0 9.0 10.0 23.0 1.0 2.0 3.0当我使用
cut -d ' ' -f1-10,23,27 ifile.txt它给了我们
1 2 3 4 5 6 7 8 9 22 26
1 2 3 4 5 6 7 8 9 22 26
1 2 3 4 5 6 7 8 9 22 26
1 2 3 4 5 6 7 8 9 22 26
1 2 3 4 5 6 7 8 9 22 26
1 2 3 4 5 6 7 8 9 22 26
1 2 3 4 5 6 7 8 9 22 26我可以理解这一点,并通过修改来解决
cut -d ' ' -f2-11,24,28 ifile.txt这里的问题是在每个开始之前都有一个空格。但我想知道一种通用的方法,这样它就不会看到开头的空格。
发布于 2015-08-05 14:18:57
我假设您的字段以空格分隔。
您可以尝试使用cut,
cut -d ' ' -f1-10,23-27 yourfile说明:
-d - Delimiter
-f - Fields发布于 2015-08-05 14:41:12
$del=' '
cut -d "$del" -f1-10,23,27 file发布于 2015-08-05 16:18:30
为了避免重复使用printf,您可以构建一个包含所有所需字段的数组,并循环遍历每个字段。
{
n=10
for (i=1; i<=n; i++)
a[$i]
a[$23]
a[$27]
for (k in a)
printf "%f%s", k, FS
print ""
}https://stackoverflow.com/questions/31824731
复制相似问题