首先说,我对使用bash和任何类型的脚本编写都很新。
我有一个csv文件,其下面有基本的列标题和值,例如:
a b c d
3 3 34 4
2 5 4 94
4 5 8 3
9 8 5 7
有没有办法只从特定列中提取数值并为每一行添加一个数字。例如,第一列的第一个编号行(从列标题后面的1开始)是1,然后是2,然后是3等,例如对于列b,输出将是:
1 3
2 5
3 5
4 8
我希望能够为各种不同的命名列标题执行此操作。
任何帮助将不胜感激,
克里斯
答案 0 :(得分:1)
喜欢这个?使用awk:
$ awk 'NR>1{print NR-1, $2}' file
1 3
2 5
3 5
4 8
说明:
$ awk ' # using awk for the job
NR>1 { # for the records or rows after the first
print NR-1, $2 # output record number minus one and the second field or column
}' file # state the file
我希望能够为各种不同的命名列标题执行此操作。使用awk时,不要指定列标题名称,而是指定列号,就像您没有指定{{ 1}}但是b
。
答案 1 :(得分:1)
awk 'NR>1 {print i=1+i, $2}' file
NR>1
跳过第一行,在您的情况下是标题。
print
打印
i=1+i
打印i,我先是0然后加1,所以我是1,下次是2,依此类推。
$2
打印第二列。
file
是您文件的路径。
答案 2 :(得分:0)
如果您有一个简单的多空格分隔文件(如您的示例中所示),awk
是此作业的最佳工具。要在awk
中按名称选择列,您可以执行以下操作:
$ awk -v col="b" 'FNR==1 { for (i=1;i<=NF;i++) if ($i==col) x=i; next }
{print FNR-1 OFS $x}' file
1 3
2 5
3 5
4 8