在文件的行的开头附加文本

时间:2015-04-21 12:08:54

标签: bash unix random

我有一个文本文件

cat file.txt

This is line1
This is line2
This is line3
This is line4.

我的要求是随机添加Test1Test2到这些行。

输出应如下所示。

Test1 This is line1
Test2 This is line2
Test1 This is line3
Test2 This is line4.

6 个答案:

答案 0 :(得分:2)

我会使用awk

awk '{r=int(rand()*2)+1; $0="Text"r" "$0}1' input

int(rand()*2)+1将在12之间返回一个随机值。 $0="Text"r" "$0在每行的开头添加Text[Random]1只是true,将导致打印修改后的行。

然而,这会在多次调用中产生相同的随机性。这不是很无聊吗?如果您希望在每次调用中都有不同的12序列,则需要为随机生成器指定种子,如下所示:

awk -vseed="$RANDOM" 'BEGIN{srand(seed)}{r=int(rand()*2)+1; $0="Text"r" "$0;}1' input

$RANDOM是一个特殊的bash变量,每次访问时都包含一个不同的随机数。使用-v,您可以将变量从命令行传递到awkawk函数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)

使用以下循环编写某种语言的程序:

  • Test1Test 2写入某个random()的文件 功能
  • 读取下一行(读取所有字符,直到&#39; \ n&#39;字符)
  • 将该行写入新文件

答案 5 :(得分:0)

你也可以做一个循环:

while read i ; do
  echo $i | sed "s/^/Test$(( ( RANDOM % 2 ) + 1)) /"
done < file.txt