shell脚本获取列数据

时间:2011-08-17 17:57:30

标签: linux bash shell

我有一个comm命令的结果文件,它有2列,我希望将这两列分成两个不同的文件,我该怎么做?
该文件看起来像:

a
b
         g
         f
c
d

3 个答案:

答案 0 :(得分:5)

根据列分隔符,您可以执行以下操作:

cut -f1 orig_file >file1
cut -f2 orig_file >file2

这里列分隔符应该是TAB。如果是其他角色,您可以使用-d char选项cut

如果要根据您的请求删除空行,可以向每行添加sed命令:

cut -f1 orig_file | sed -e /^$/d >file1
cut -f2 orig_file | sed -e /^$/d >file2

答案 1 :(得分:1)

使用cut将为每列产生一个命令。 您可以在单个命令中使用awk来完成。

 awk '{for (i=1;i<=NF;i++) print $i>i".txt"}' your_file

默认情况下,Tab是字段分隔符。 如果字段分隔符不是制表符,则在awk之后添加标记,如下所示

awk -F"<field separator>" '{....

答案 2 :(得分:1)

您可以根据字符索引剪切相关部分:

# assuming constant 5 chars for col1, 5 chars for col2
cat file | cut -c0-5  | sed '/^\s*$/ {d}' > col1
cat file | cut -c6-10 | sed '/^\s*$/ {d}' > col2

sed管道删除空行(仅包含空格的行)。也可以使用grep -v '^[[:space:]]*$'删除它们。