仅打印多个第一个字符

仅打印多个第一个字符

我有一个大文本文件,我只想在一个命令行中打印每行的前 4 个、前 5 个和前 8 个字符。

例如我有以下几行:

123456789ab
ABCdefgih55

所以输出必须是:

1234
ABCd
12345
ABCde
12345678
ABCdefgh

答案1

for len in 4 5 8; do
    cut -c "1-$len" file
done

这会cut -c重复使用来剪切名为 的文件的每一行的第一部分file。剪切位的长度取决于循环变量len

如果您严格遵守“一行”标准:

for len in 4 5 8; do cut -c "1-$len" file; done

或者,作为一个易于使用的 shell 函数:

cut_to_lengths () {
    file=$1; shift
    for len do
        cut -c "1-$len" "$file"
    done
}

使用它:

$ cut_to_lengths file 4 5 8 1
1234
ABCd
12345
ABCde
12345678
ABCdefgi
1
A

评论您指定您不想输出行,如果它们是更短切割长度。

为此,我们可以将cut命令更改为awk命令:

awk -v len="$len" 'length >= len { print substr($0, 1, len) }'

将上面代码中的替换cut -c "1-$len"为上面的命令。awk

答案2

您的示例格式不正确。我想空白应该是一个新行?如果是这样,最简单的方法是使用cut

$ cut -c -4 input将打印每行的前 4 个字符。使用您喜欢的任意数量的字符重复此操作。

答案3

尝试以下操作

for line in `cat input`; do echo ${line} | cut -c 1-4 && echo ${line} | cut -c 1-5 && echo ${line} | cut -c 1-8; done

这给出了

1234
12345
12345678
ABCd
ABCde
ABCdefgi

相关内容