Bash/Shell:分析第n列中包含数据的行的选项卡分隔CSV

Bash/Shell:分析第n列中包含数据的行的选项卡分隔CSV,bash,shell,csv,awk,Bash,Shell,Csv,Awk,我有一个单独的CSV标签,可以下载并在本地打开 我想在第n列中显示包含数据的任何行,即在该行的第n个制表符之前包含除制表符以外的任何内容的行 我会发布我到目前为止尝试过的东西,但我的sed知识只足以假设它可以用sed完成 edit1: 样品 id num name title 1 1 foo foo 2 2 bar 3 3 baz baz 如果n=3(name),那么我想输出行1+3 如果n=4(标题),那么我想输出所有的行 编辑2: 我找到了这个可能的解决方案

我有一个单独的CSV标签,可以下载并在本地打开

我想在第n列中显示包含数据的任何行,即在该行的第n个制表符之前包含除制表符以外的任何内容的行

我会发布我到目前为止尝试过的东西,但我的sed知识只足以假设它可以用sed完成

edit1:

样品

id num name title
1  1   foo  foo
2  2        bar
3  3   baz  baz
如果n=3(name),那么我想输出行1+3

如果n=4(标题),那么我想输出所有的行

编辑2:

我找到了这个可能的解决方案:

awk -F '","'  'BEGIN {OFS=","} { if (toupper($5) == "STRING 1")  print }' file1.csv > file2.csv 
资料来源:

但是尝试

awk -F '"\t"'  'BEGIN {OFS="\t"} { if (toupper($72) != "")  print }' data.csv > data-tmp.csv

无法工作(结果文件为空),因此可能是我弄错了\t?(在不理解awk的情况下复制和粘贴)

我不确定我是否理解您想要的行为。是这个吗

$ cat file
id      num     name    title
1       1       foo     foo
2       2               bar
3       3       baz     baz

$ awk -v n=3 -F$'\t' 'NR>1&&$n!=""' file
1       1       foo     foo
3       3       baz     baz

$ awk -v n=4 -F$'\t' 'NR>1&&$n!=""' file
1       1       foo     foo
2       2               bar
3       3       baz     baz

我假设远程计算机上有足够的空间:

1) 使用
cut
获取所需的列N(分隔符按标准为制表符)

2) 仅获取非空行的行号

grep -c '^$' -n tempfile | sed 's/:.*//' > linesfile
3) 使用sed提取行

while read $linenumber ; do
    sed "$linenumber p" >> newdatafile
done < linesfile 
读取$linenumber时;做
sed“$linenumber p”>>新数据文件
完成<行文件

不幸的是,通过管道将切割输出传输到grep无法提取行号,但我非常确定还有更优雅的解决方案。

名称和标题之间的区别是什么。我看到的是name可以为null,但title不能为null,否则两者都是相同的。我说得对吗?太好了,第二个正好可以。(我真的需要学习awk)。谢谢
while read $linenumber ; do
    sed "$linenumber p" >> newdatafile
done < linesfile