我有一个文本文件
cat file.txt
This is line1
This is line2
This is line3
This is line4.
我的要求是随机添加Test1
,Test2
到这些行。
输出应如下所示。
Test1 This is line1
Test2 This is line2
Test1 This is line3
Test2 This is line4.
答案 0 :(得分:2)
我会使用awk
:
awk '{r=int(rand()*2)+1; $0="Text"r" "$0}1' input
int(rand()*2)+1
将在1
和2
之间返回一个随机值。 $0="Text"r" "$0
在每行的开头添加Text[Random]
。 1
只是true
,将导致打印修改后的行。
然而,这会在多次调用中产生相同的随机性。这不是很无聊吗?如果您希望在每次调用中都有不同的1
和2
序列,则需要为随机生成器指定种子,如下所示:
awk -vseed="$RANDOM" 'BEGIN{srand(seed)}{r=int(rand()*2)+1; $0="Text"r" "$0;}1' input
$RANDOM
是一个特殊的bash变量,每次访问时都包含一个不同的随机数。使用-v
,您可以将变量从命令行传递到awk
。 awk
函数srand()
设置随机生成器的种子。
答案 1 :(得分:2)
使用bash
的{{1}}解决方案:
shuf
答案 2 :(得分:1)
<强> addToLine.sh 强>
rand() {
printf $(( $1 * RANDOM / 32767 ))
}
#rand_element borrowed from github.com/search?q=bashnative
rand_element () {
local -a th=("$@")
unset th[0]
printf $'%s\n' "${th[$(($(rand "${#th[*]}")+1))]}"
}
sed -e 's/^/'"$(rand_element Test1 Test2)"' /' file.txt
<强>输出:强>
Test1 This is line1
Test2 This is line2
Test1 This is line3
详细了解sed
答案 3 :(得分:1)
基于hek2mgl的好方法(+1给他),让我们首先提供我们想要添加的单词集;然后,在打印时随机使用它们:
awk -v text="Test1 Test2" '
BEGIN {n=split(text, a)}
{print a[int(rand()*n+1)], $0}' file
$ awk -v text="Test1 Test2" 'BEGIN{n=split(text, a)} { print a[int(rand()*n+1)], $0}' a
Test1 This is line1
Test1 This is line2
Test2 This is line3
Test1 This is line4.
更多的话:
$ awk -v text="Test1 Test2 Test3" 'BEGIN{n=split(text, a)} {print a[int(rand()*n+1)], $0}' a
Test1 This is line1
Test1 This is line2
Test3 This is line3
Test1 This is line4.
答案 4 :(得分:0)
使用以下循环编写某种语言的程序:
Test1
或Test 2
写入某个random()
的文件
功能答案 5 :(得分:0)
你也可以做一个循环:
while read i ; do
echo $i | sed "s/^/Test$(( ( RANDOM % 2 ) + 1)) /"
done < file.txt