在bash中使用空格提取列值

时间:2018-01-31 12:03:55

标签: bash shell parsing tabular

我有一个表输出,如下所示:

col1     col2            col3     col4
sample1  sample value 1 col3value colvalue4
sample1  sample value 2 col3value colvalue4
sample1  sample value 3 col3value colvalue4
sample1  sample value 4 col3value colvalue4

我想提取col2值并从表中打印出来。

sample value 1
sample value 2
sample value 3
sample value 4

有人可以帮我解析表格并打印存在于它们之间的空格的值吗?

3 个答案:

答案 0 :(得分:0)

您可以使用awk

awk 'NR > 1 {print $2" "$3" "$4}' /your/path/to/file.txt

答案 1 :(得分:0)

你可以这样做

 while IFS=$'\t' read col1 col2 col3 col4; do echo $col2; done < <(cat filepath.ext)

这假设您的输出有选项卡作为分隔符

答案 2 :(得分:0)

我不知道,如果你的表包含制表符(\ t)。因此,我想向您介绍一种方便且可扩展的方式来提取您正在寻找的内容。 sed,流编辑器是一个很好的命令行工具。

cat the-table.csv | sed -e "s/^[^ ]\+[ ]\+//" -e "s/[ ]\+[^ ]\+$//" -e "s/[ ]\+[^ ]\+$//

<强>解释

  • 第一个-e参数剪切起始非空格字符和以下空格字符
  • 第二个-e参数会截断末尾的所有非空格字符,包括左侧空格字符
  • 第三个-e参数与第二个参数
  • 相同

完整示例:

#!/bin/bash
cat <<FILE | sed -e "s/^[^ ]\+[ ]\+//" -e "s/[ ]\+[^ ]\+$//" -e "s/[ ]\+[^ ]\+$//"
col1     col2            col3     col4
sample1  sample value 1 col3value colvalue4
sample1  sample value 2 col3value colvalue4
sample1  sample value 3 col3value colvalue4
sample1  sample value 4 col3value colvalue4
FILE

<强>输出

col2
sample value 1
sample value 2
sample value 3
sample value 4