gpt4 book ai didi

Linux shell 和排序 -t 和 -k

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:19 25 4
gpt4 key购买 nike

我正在使用 Linux shell 脚本对 movielens 数据创建 5 折交叉验证。谁能给我解释一下:

  1. sort -k 1,1n 是什么意思?我知道这意味着从 1 列开始到 1n 结束,但是 1n 是什么意思?
  2. 我的数据是这样的****::****::***,也就是说分隔符是::,但是两者都不是"::"和 "::"都适用于 sort -t 选项。你能告诉我将 :: 设置为分隔符的正确方法是什么吗? (sort -t "" 表示分隔符是空格;这行得通,但我的文件的分隔符不是空格。)
trap `rm -f tmp.$$; exit 1` 1 2 15 # trap begin to execute the cmd in the quote when it meet signal 1,2 and 15
batch=200000
totalTuple=1000000
#$$ is the process id
for i in 1 2 3 4 5 #five fold cross validation, train/test is one fold
do
head -`expr $i \* ${batch}` u.data | tail -`expr ${batch}` > tmp.$$ # take the ith 1/5 block
# expr return the cmd result as string
sort -t"\:\:" -k 1,1n -k 2,2n tmp.$$ > u$i.test
#sort -k -k, --key=KEYDEF sort via a key; KEYDEF gives location and type
#sort -t, --field-separator=SEP
head -`expr \( $i - 1 \) \* ${batch}` u.data > tmp.$$
tail -`expr \( 5 - $i \) \* ${batch}` u.data >> tmp.$$
sort -t"\:\:" -k 1,1n -k 2,2n tmp.$$ > u$i.base
done

最佳答案

sort -k 1,1n 表示(仅)对第一个字段进行排序并进行数字排序。

Sort -t 需要单个字符来分隔字段。因此,您必须执行以下两项操作之一:

  1. 计算每个 :: 对之间的空字段。
  2. Munge 数据,以便 :: 分隔符被一些其他字符替换。使用 : 是否安全值得商榷;这取决于您的数据是否可以单独拥有 : 。您可以使用控制字符,例如 FS(字段分隔符、Control-\、0x1C、八进制 034),并且有相当的信心它不会出现在您的正常数据。

可以使用 Bash(使用 ANSI C quoting )和 sed 完成 Munging(和 unmunging):

sed -e $'s/::/\x1C/g' tmp.$$ |
sort -t $'\x1C' -k 1,1n -k 2,2n
sed -e $'s/\x1C/::/g' > u$i.base

关于Linux shell 和排序 -t 和 -k,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33110409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com