在 bash 中如何检查文本文件是否以制表符作为分隔符?

Red*_*son 6 bash shell awk grep sed

所以我有一个文本文件,它可能有一个制表符作为其字段分隔符(分隔符),或者可能有一个空格作为字段分隔符。我想检查该文本文件是否已制成表格,否则我将对该文件执行其他操作。我正在使用 bash 脚本。所以我对任何纯 bash、sed、awk、grep 等都持开放态度(注意:它们都是 GNU)。所以我正在考虑这样的结构:

if [if delimiter is tab]; then
    #do soemthing
elif [if delimiter is space]; then
    #do something else
fi
Run Code Online (Sandbox Code Playgroud)

有什么建议么?如果需要进一步解释,请告诉我。谢谢!

以下是有关文本文件外观的更新说明:

如果文本文件有制表符作为分隔符,则它在每一行上进行分隔。如果文本文件以空格作为分隔符,则不会对每一行进行分隔。

以下是我可能遇到的文本文件的示例:

分隔符是制表符

col1   col2   col3
-------
1   2   3
4   5   6
Run Code Online (Sandbox Code Playgroud)

分隔符为空格: (空格在 12 和 3 && 4 和 56 之间)

col1col2col3
-----------
12 3
4 56
Run Code Online (Sandbox Code Playgroud)

Eta*_*ner 7

假设当文件以制表符分隔时,制表符仅存在于第一行,那么这

if awk '{exit !/\t/}' "$file"; then
    : # tab file
else
    : # space file
fi
Run Code Online (Sandbox Code Playgroud)

应该做你想做的事。

还:

if [ -n "$(sed -n '/\t/p;q' "$file")" ]; then
    : # tab file
else
    : # space file
fi
Run Code Online (Sandbox Code Playgroud)

  • FWIW `awk '{exit !/\t/}' file` 可以完成这项工作。 (2认同)