小编Cyr*_*rus的帖子

在R中解析txt文件并提取信息

我需要从文件之间结构不同的文本文件中提取信息。虽然这可以使用宏来完成,但由于文件是可变的,请按行号进行选择。并且行内间距并非对所有文件都成功。

我想知道是否有人可以告诉我是否有一种方法可以解析txt文件并按关键字搜索并提取关键字后的信息?例如,像流量:99.99,我想提取 99.99。另一个问题是,使用流量示例时,流量会在每个文件中出现多次。有没有办法别名/索引 Flow Rate: 以便我可以在第三次出现时进行选择?

欢迎任何提示或技巧。我知道如何在识别关键字时打印整行,但不知道如何处理多次出现,并且只选择关键字后面的数字:

all_data = readLines("Unit 5 2013.txt")
hours_of_operation <- grep("Annual Hours of Operation:    ",all_data)
all_data[hours_of_operation]
[1] "    Annual Hours of Operation:    8760.0 hours/yr"
Run Code Online (Sandbox Code Playgroud)

谢谢

J

string parsing r extract

5
推荐指数
1
解决办法
8806
查看次数

在 R 中,如何根据数据帧每行的条件更改字符串的值

我有一个数据框:

a = c(2, 3, 5, 4) 
b = as.character(c("dogs are loving", "cats are the best", "we prefer cats", "dogs are sweet"))
df = data.frame(a, b)
print(df)

 a         b
 2   dogs are loving
 3   cats are the best
 5   we prefer cats
 4   dogs are sweet
Run Code Online (Sandbox Code Playgroud)

我想更改 df$b 使其变为:

 a     b
 2   dogs are loving
 3   cats
 5   cats
 4   dogs are sweet
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用 grepl 来查明字符单元格是否包含单词 cats...

grepl("cats", df$b, ignore.case=TRUE)
Run Code Online (Sandbox Code Playgroud)

...但我不知道如何使用它来将字符单元格更改为“猫”。

replace r

5
推荐指数
1
解决办法
7705
查看次数

需要使用Hive将Shell Action中的变量传递给Oozie Shell

所有,

希望将变量从shell动作传递给oozie shell.我在我的脚本中运行这样的命令:

#!/bin/sh
evalDate="hive -e 'set hive.execution.engine=mr; select     max(cast(create_date as int)) from db.table;'"
evalPartition=$(eval $evalBaais)
echo "evaldate=$evalPartition"
Run Code Online (Sandbox Code Playgroud)

诀窍是它是shell中的hive命令.

然后我运行它来获取它在oozie中:

${wf:actionData('getPartitions')['evaldate']}
Run Code Online (Sandbox Code Playgroud)

但它每次都是空白!我可以在我的shell中运行这些命令很好,它似乎工作,但oozie没有.同样,如果我在群集的其他框上运行命令,它们也可以正常运行.有任何想法吗?

shell hive oozie

5
推荐指数
1
解决办法
2136
查看次数

使用'/'进行Bash变量扩展

在一段时间的读取循环中,我看到了这个变量扩展${line/device name:}.我已经尝试使用自己的输入文件运行脚本,它只打印出行.

你能告诉我扩展在做什么吗?

bash variable-expansion parameter-expansion

5
推荐指数
1
解决办法
128
查看次数

如何在一行上定义一个函数

通常在移动文件时,我需要稍后相反.所以在我的.bashrc中我包含了这个工作代码:

rmv() {
  mv $2/${1##*/} ${1%/*}
}
Run Code Online (Sandbox Code Playgroud)

现在我想知道为什么我不能把它写成一个单一的班轮.这是我试过的:

rmv() {mv $2/${1##*/} ${1%/*}}
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我会收到此错误:

-bash: .bashrc: line 1: syntax error near unexpected token `{mv'
Run Code Online (Sandbox Code Playgroud)

syntax bash function

5
推荐指数
1
解决办法
4455
查看次数

.bat 文件中的 Sed 等效项

我有一个 shell 脚本 (.sh),在其中使用sed命令替换文件中的最后一个匹配字符(我已将命令放在下面)。

我应该如何替换命令以在批处理文件 (.bat) 中获得相同的功能而不添加任何包/插件(为了在 Windows 7 及更高版本中兼容)?

sed -i '$ s/,/;/g' abc.java
Run Code Online (Sandbox Code Playgroud)

windows scripting sed batch-file sh

5
推荐指数
1
解决办法
2万
查看次数

使用 mv 在 bash 中使用正则表达式

我有 4 个文件要重命名:

./01:
I0010001  I0020001

./02:
I0010001  I0020001
Run Code Online (Sandbox Code Playgroud)

我想为.dcm每个文件添加辅助文件名,所以我尝试过:

$ mv \(*/*\) \1.dcm
mv: cannot stat '(*/*)': No such file or directory

$ mv \(./*/*\) \1.dcm
mv: cannot stat '(./*/*)': No such file or directory

$ mv \(./\*/\*\) \1.dcm
mv: cannot stat '(./*/*)': No such file or directory

$ mv "\(./*/*\)" "\1.dcm"
mv: cannot stat '\(./*/*\)': No such file or directory

$ mv 0\([1-2]\)/I00\([1-2\)]0001 0\1/I00\20001.dcm
mv: cannot stat '0([1-2])/I00([1-2)]0001': No such file or directory

$ mv "0\([1-2]\)/I00\([1-2\)]0001" …
Run Code Online (Sandbox Code Playgroud)

regex bash mv file-rename batch-rename

5
推荐指数
1
解决办法
8982
查看次数

'#!/bin/sh -xe' 是什么意思?

Tribler 的GitHub 上的存储库中,我看到一个带有解释器的文件#!/bin/sh -xe.

在 Mac 和 Linux 上man sh重定向到BASH(1)(与 相同man bash)。

在这个 man 文件中,在以下部分:

选项

,没有提到选项-x,也没有选项-e

口译员的意思是#!/bin/sh -xe什么?

bash sh

5
推荐指数
1
解决办法
3152
查看次数

R 中的 grep 使用具有与向量相同顺序的多个模式的字符向量

我有两个想要 grep 的向量,但我想保留 grep 模式中的顺序。我使用循环解决它,尽管我想知道是否有其他(更好)的方法来做到这一点。

例如。

to_match <- c("KZB8","KBB9","KBC9","KZA9","KZB2","KZB5","KZB6")
vectorA <- c("RuL_KZA9","RuL_KZB9","RuL_KZA5","RuL_KZC6","RuL_KZB8")
Run Code Online (Sandbox Code Playgroud)

我是这样解决的:

matching <- c()
for (i in to_match){
  t <- grep(i, vectorA, value = T)
  matching <- c(matching,t)
}
> matching
[1] "RuL_KZB8" "RuL_KZA9"
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我在这里看到了很好的答案:grep using acharactervectorwithmultiplepatterns

但正如您将看到的问题:

grep(paste(to_match, collapse = "|"),vectorA, value = T)
[1] "RuL_KZA9" "RuL_KZB8"
Run Code Online (Sandbox Code Playgroud)

是根据 grep 找到的第一个元素而不是使用匹配向量对匹配进行排序。

预先感谢您对更高效的代码的想法。

尼科

r grepl

5
推荐指数
1
解决办法
834
查看次数

仅当字符串在 shell 中匹配时才删除字符串的第一个和最后一个字符?

所以我基本上是从文件中读取第一行,并且我希望修剪第一个和最后一个字符,但前提是它们等于某个字符。我希望从字符串中删除“{”和“}”,但前提是它们分别是第一个和最后一个字符。

输入:

{Some_random_data_here, {more data here}, test}  
Run Code Online (Sandbox Code Playgroud)

输出:

Some_random_data, {more data here}, test
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的完整命令,它能够删除第一个命令,但不能删除最后一个命令。

$(head -n 1 "$filePath" | sed s/^{//;s/}$//)
Run Code Online (Sandbox Code Playgroud)

bash shell

5
推荐指数
1
解决办法
117
查看次数