我有一个要求,我必须有一个“制表符分隔的文件”,该文件必须具有三列。我在此处复制的六行示例
$(document).ready(function() {
//connect to the socket server.
var socket = io.connect('http://' + document.domain + ':' + location.port + '/test');
var numbers_received = [];
//receive details from server
socket.on('newnumber', function(msg) {
console.log("Received" + msg.number);
//maintain a list of ten numbers
if (numbers_received.length >= 1) {
numbers_received.shift()
}
numbers_received.push(msg.number);
numbers_string = '';
for (var i = 0; i < numbers_received.length; i++) {
numbers_string = numbers_string + '<p>' + numbers_received[i].toString() + '</p>';
}
$('#log').html(numbers_string);
});
Plotly.plot('chart',[{
y:[numbers_received],
type:'line'
}]);
var cnt = 0;
setInterval(function(){
Plotly.extendTraces('chart',{ y:[[numbers_received]]}, [0]);
cnt++;
if(cnt > 500) {
Plotly.relayout('chart',{
xaxis: {
range: [cnt-500,cnt]
}
});
}
},15);
});
每个sample_id具有对应的3个file_ids
我的要求是遍历所有sample_id,并找到所有三个file_ids
对于每个sample_id
cd file_id file_name sample_id
30a6e42d 2f601196 TARGET-20-PABLDZ-04A
25fe4062 3ea58509 TARGET-20-PABLDZ-04A
839d38ec 5c971b6e TARGET-20-PABLDZ-04A
79f40af8 4a2ace7c TARGET-20-PADYIR-09A
afb79159 fea2f740 TARGET-20-PADYIR-09A
177500c8 1eae7be6 TARGET-20-PADYIR-09A
(文件夹的名称与file_id相同)。 <file_id>
文件夹与制表符分隔文件所在的位置相同。
获取文件名(该文件位于<file_id>
文件夹中)
cp file_name到一个目录
感谢您的帮助
答案 0 :(得分:0)
您可以尝试
while IFS=$'\t' read -r column1 column2 column3 ; do
printf "%b\n" "column1<${column1}>"
printf "%b\n" "column2<${column2}>"
printf "%b\n" "column3<${column3}>"
done < "myfile"
IFS = $'\ t'告诉bash制表符是定界符
答案 1 :(得分:0)
只需使用awk的system
函数:注意,这将创建目录并尝试移动文件。警告读者:执行该命令之前,请先了解该命令的作用。也许在各个位置插入“ echo”以查看预期的行为。
awk 'NR>1{cmd=sprintf("mkdir -p %s; mv %s/%s %s", $3, $1, $2, $3 ); system (cmd) }' input-file
这假设您要将文件移动到第3列中命名的目录(您未指定目标目录的名称,所以我在猜测),并在尝试移动文件之前创建文件