Linux 如何使用bash脚本将一行中的一些重复模式分割成多行?
我对bash脚本有一些问题 我有一个字符串,它有一些像这样的重复模式Linux 如何使用bash脚本将一行中的一些重复模式分割成多行?,linux,bash,sed,awk,cut,Linux,Bash,Sed,Awk,Cut,我对bash脚本有一些问题 我有一个字符串,它有一些像这样的重复模式 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 ... 每个字段由tab键分隔 我希望它看起来像这样 1 2 3 4 1 2 3 4 1 2 3 4 … 如何使用诸如cut、sed、awk之类的bash脚本解决这个问题 我试过一些命令,比如cut-f'seq 4,4,40'example.txt 它不起作用 看起来很简单,但对我来说很难…您可以像这样使用sed: s='1 2 3 4 1 2 3 4 1 2
1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 ...
每个字段由tab键分隔
我希望它看起来像这样
1 2 3 4
1 2 3 4
1 2 3 4
…
如何使用诸如cut、sed、awk之类的bash脚本解决这个问题
我试过一些命令,比如cut-f'seq 4,4,40'example.txt
它不起作用
看起来很简单,但对我来说很难…您可以像这样使用sed:
s='1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4'
p='1 2 3 4'
echo "$s"|sed "s/$p\s*/&\n/g"
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
现场演示:您可以像这样使用sed:
s='1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4'
p='1 2 3 4'
echo "$s"|sed "s/$p\s*/&\n/g"
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
现场演示:如果您事先知道序列的结束编号,您可以执行以下操作:
LAST_NUMBER=4
sed-e“s/$LAST_NUMBER\t*/&\n/g”
只需用序列中的最后一个数字替换4
如果您不知道该号码,则必须使用以下方法进行搜索:
#/bin/bash
声明-A已检查的\u编号
最后的号码=
读行时;做
SPLIT_LINE=$(cut-d”“-f1-如果事先知道序列的结束编号,可以执行以下操作:
LAST_NUMBER=4
sed-e“s/$LAST_NUMBER\t*/&\n/g”
只需用序列中的最后一个数字替换4
如果您不知道该号码,则必须使用以下方法进行搜索:
!/bin/bash
声明-A已检查的\u编号
最后的号码=
边读边做
SPLIT_LINE=$(cut-d”“-f1-这是一个纯bash解决方案:
IFS=$'\t' set -- $(<input_file)
seen=()
while [[ $1 ]]; do
if (( ${seen[$1]} )); then # If we've seen the value before, start a new line.
echo
unset seen
fi
printf '%s ' "$1"
seen[$1]=1
shift
done
IFS=$'\t'set--$(这里有一个纯bash解决方案:
IFS=$'\t' set -- $(<input_file)
seen=()
while [[ $1 ]]; do
if (( ${seen[$1]} )); then # If we've seen the value before, start a new line.
echo
unset seen
fi
printf '%s ' "$1"
seen[$1]=1
shift
done
IFS=$'\t'set--$(Anawk
version
awk '{for (i=1;i<=NF;i++) {printf "%s"(i%4?" ":"\n"),$i}}' file
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
awk -v RS="\t" '{printf "%s"(NR%4?" ":"\n"),$0}' file
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
awk
版本
awk '{for (i=1;i<=NF;i++) {printf "%s"(i%4?" ":"\n"),$i}}' file
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
awk -v RS="\t" '{printf "%s"(NR%4?" ":"\n"),$0}' file
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
xargs
可能有助于:
kent$ echo "1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4"|xargs -n4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
xargs
可能有助于:
kent$ echo "1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4"|xargs -n4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
这可能适合您:
printf "%s\t%s\t%s\t%s\n" $string
或者要将字段分隔为空格:
printf "%s %s %s %s\n" $string
这可能适合您:
printf "%s\t%s\t%s\t%s\n" $string
或者要将字段分隔为空格:
printf "%s %s %s %s\n" $string
是否总是有4个字段被重复或会发生变化?是否总是有4个字段被重复或会发生变化?